import axios from 'axios'
let refreshing = false; // 标记是否正在刷新 token
const refreshQueue = []; // 存储挂起的请求队列
// 创建一个 axios 实例
const axiosInstance = axios.create({
    baseURL: 'http://localhost:3009', // 替换为你的 API 基础 URL
    timeout: 3000, // 请求超时设置
    headers: {
        'Content-Type': 'application/json',
    },
});

// 通用接口封装
// const request = async (method, url, data = null, config = {}) => {
//     try {
//         const response = await axiosInstance({
//             method, // 请求方法
//             url, // 请求 URL
//             data, // 请求体（适用于 POST/PUT）
//             ...config, // 额外的配置（如 headers 等）
//         });
//         return response; // 返回响应数据
//     } catch (error) {
//         throw error; // 抛出错误
//     }
// };
// const api = {
//     get: (url, config) => request('get', url, null, config), // GET 请求
//     post: (url, data, config) => request('post', url, data, config), // POST 请求
//     put: (url, data, config) => request('put', url, data, config), // PUT 请求
//     delete: (url, config) => request('delete', url, null, config), // DELETE 请求
// };
// export default api;


// 登录
export async function userLogin(usersname, password) {
    return await axiosInstance.post('/login', {
        usersname,
        password
    });
}
// 发送验证码
export async function sendVerification(email) {
    return await axiosInstance.get('/register',{params:{email}});
}
// 注册 register
export async function register(usersname, password) {
    return await axiosInstance.post('/user', {
        usersname,
        password
    });
}

// 获取登录状态
export async function loginInfo() {
    return await axiosInstance.get('/loginInfo');
}
// 刷新token
async function refreshToken() {
    const res = await axiosInstance.get('/refresh', {
        params: {
            token: localStorage.getItem('refresh_token')
        }
    });
    // localStorage.setItem('user', res.data.userInfo['usersname']);
    localStorage.setItem('access_token', res.data.accessToken);
    localStorage.setItem('refresh_token', res.data.refreshToken);
    return res;
}
// 请求拦截器
axiosInstance.interceptors.request.use((config) => {
    // 在请求发出之前做一些操作，比如添加认证头等
    const accessToken = localStorage.getItem('access_token');
    if (accessToken) {
        config.headers.authorization = `Bearer ${accessToken}`;
    }
    return config;
});
// 响应拦截器
axiosInstance.interceptors.response.use(async (response) => {
    // config 是 response 中的 config 属性，它包含了原始请求的配置信息。这个配置对象包括请求的 URL、请求方法、请求头等信息。
    let { data, config } = response;
    // 如果access_token失效,refresh_token有效且非/refresh接口,则重新调用refreshToken接口生成双token
    if (data.code === 401 && !config.url.includes('/refresh')) {
        // 如果正在刷新 token，加入队列等待刷新完成
        if (refreshing) {
            return new Promise((resolve) => {
                refreshQueue.push(() => resolve(axiosInstance(config)));
            });
        } else {
            refreshing = true;
            const res = await refreshToken();
            console.log(res);
            try {
                if (res.status === 200 && res.data.code === 200) {
                    const queue = [...refreshQueue]
                    // 刷新成功，重新执行队列中的请求
                    queue.forEach((callback) => callback())
                    refreshQueue.length = 0;
                    return axiosInstance(config);//再次执行原始请求
                } else {
                    alert('太久未登录,请重新登录');
                    window.location.href = '/login';
                }
            }
            catch (err) {
                alert('太久未登录,请重新登录');
                window.location.href = '/login';
            }
        }
    } else {
        return response;
    }

})

//石路涛 添加投诉
export async function addComplaint(data) {
    return await axiosInstance.post('/addc', data);
}
// 获取投诉信息
export async function getComplaint(time, type) {
    return await axiosInstance.get('/complaint', { params: { time, type } });
}
//删除投诉
export async function delComplaint(_id) {
    console.log(_id);
    
    return await axiosInstance.post('/delct', { _id });
}

export default axiosInstance;